// 对于axios进行二次封装
import axios from 'axios'
import Vue from 'vue'
import { getToken } from '_utils'
import router from '../router'
const vm = new Vue()
// 定义公共请求config
const request = axios.create({
  baseURL: process.env.NODE_ENV === 'development' ? '/api' : '线上源/api',
  timeout: 6000
})
// 添加拦截器
let loading = null
request.interceptors.request.use(function (config) {
  loading = vm.$loading({
    lock: true,
    text: '加载中...',
    spinner: 'el-icon-loading',
    background: 'rgba(0, 0, 0, 0.7)'
  })
  // 请求头中携带token
  if (getToken()) {
    config.headers.token = getToken()
  }
  return config
}, function (error) {
  loading.close()
  return Promise.reject(error)
})

request.interceptors.response.use(function (res) {
  loading.close()
  // 判断token是否过期 或者 是否没有传token
  const errCode = [401, 403]
  if (errCode.includes(res.data.code)) {
    // 401 token过期 403 没有传token
    // 弹出错误提示 并清除缓存 然后跳转到 登录页
    vm.$message({
      type: 'error',
      message: '登录状态过期或者没有登录',
      duration: 2000,
      onClose: () => {
        localStorage.removeItem('token')
        localStorage.removeItem('userInfo')
        router.push('/login')
      }
    })
  }
  return res
}, function (error) {
  loading.close()
  return Promise.reject(error)
})

export default request
